﻿/**
 * @file coverwidgetitemdelegate.h
 * @author huangxb
 * @email 18228033207@163.com
 * @date 2024.04.04
 * @license MIT License
 * @brief 通过自定义widget覆盖视图项所在位置来显示自定义控件.
 * 视图项自定义widget父窗口使用视图viewport()函数返回的widget，
 * 这样视图自绘时也会绘制其子窗口，达到视图项显示自定义widget的效果。
 * 而自定义视图的位置是通过实现自定义委托QStyledItemDelegate，在其
 * paint函数中获取该视图项当前位置，然后对自定义widget使用setGeometry
 * 显示在该位置（相当于盖住了原视图项的内容），达到视图显示自定义控件的功能。
 *
 * @htmlonly
 * <span style="font-weight: bold">History</span>
 * @endhtmlonly
 * Version|Auther|Date|Describe
 * ------|----|------|--------
 * V1.0|huangxb|2024.04.04|创建
 */
#ifndef CCOVERWIDGETITEMDELEGATE_H
#define CCOVERWIDGETITEMDELEGATE_H

/* 库头文件 */
#include <QStyledItemDelegate>

/** @brief 通过自定义widget覆盖视图项所在位置来显示自定义控件. */
class CCoverWidgetItemDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数.
     * @param[in] parent 父对象
     */
    explicit CCoverWidgetItemDelegate(QObject *parent = nullptr);

    /**
     * @brief 自定义视图项绘制实现.
     * @param[in] painter 被绘制的设备
     * @param[in] option 绘制选项
     * @param[in] index 当前视图项的索引
     * @see QStyledItemDelegate#paint
     */
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
};

#endif // CCOVERWIDGETITEMDELEGATE_H
